<?php
/**
 * 定义 Controller_FoBase 类
 *
 */

/**
 * Controller_FoBase 是前台控制器的基类，提供一些公共方法
 *
 */
class Controller_FoBase extends FLEA_Controller_Action {
	
	
	/**
	 * 构造函数
	 *
	 * @return Controller_FoBase
	 */
	function Controller_FoBase() {
	 	
		 
	
	}

	 
	/**
	 * 返回用 _setBack() 设置的 URL
	 */
	function _goBack() {
		$url = $this->_getBack();
		unset ($_SESSION['BACKURL']);
		redirect($url);
	}

	/**
	 * 设置返回点 URL，稍后可以用 _goBack() 返回
	 */
	function _setBack() {
		$_SESSION['BACKURL'] = encode_url_args($_GET);
	}

	/**
	 * 获取返回点 URL
	 *
	 * @return string
	 */
	function _getBack() {
		if (isset ($_SESSION['BACKURL'])) {
			$url = $this->rawurl($_SESSION['BACKURL']);
		} else {
			$url = $this->_url();
		}
		return $url;
	}

	function getToken(){
		 $encrypt_key = md5(((float) date("YmdHis") 
		 + rand(10000000000000000,99999999999999999)).rand(100000,999999));
		 
		 $code=base64_encode($encrypt_key);
		 
		 if($_SESSION['TOKEN']){
		 	$_SESSION['TOKEN'] = $code;
		 }
		 else {
		 	session_register('TOKEN');
		 	$_SESSION['TOKEN']=$code;
		 }
		 return $code;
	}
	function checkToken($code){
		if($_SESSION['TOKEN'] !== $code){
			return false;
		}
		return true;
	}
	
	/**
	 * 直接提供查询字符串，生成 URL 地址
	 *
	 * @param string $queryString
	 *
	 * @return string
	 */
	function rawurl($queryString) {
		if (substr($queryString, 0, 1) == '?') {
			$queryString = substr($queryString, 1);
		}
		return $_SERVER['SCRIPT_NAME'] . '?' . $queryString;
	}

	/**
	 * 上传图片
	 */
	function _uploadPic($postname,  $dir, $width = 0, $height = 0,$filename) {
		
		FLEA::loadClass('FLEA_Helper_FileUploader');
 		$uploader =& new FLEA_Helper_FileUploader(); 
 		
		// 检查上传文件是否存在
		if (!$uploader->isFileExist($postname)) {
			return array (
				false,
				''
			);
		}
		
		
		
		// 检查文件扩展名是否是允许上传的类型
		if (($width != 0) && ($height != 0)){
			$file = & $uploader->getFile($postname);
			if (!$file->check(get_app_inf('ImgFileExts'))) {
				return array (false,'不被支持的文件类型.');
			}
		}else{
			$file = & $uploader->getFile($postname);
			if (!$file->check(get_app_inf('UploadFileExts'))) {
				return array (false,'不被支持的文件类型.');
			}
		}

		//$image->crop(get_app_inf('logoMaxWidth'), get_app_inf('logoMaxHeight'));
		$path = get_app_inf('uploadDir') .DS.$dir.DS. date('/Y/m');
		
		if(!function_exists('mkdirs')){
			FLEA::loadFile('FLEA_Helper_FileSystem');
		}
		mkdirs($path);
		
		//如果没有指定要保存的文件名，系统自动生成一个随机的文件名 
		if($filename == ''){
			// 生成唯一的文件名（重复的可能性极小）
			$id = md5(time() . $file->getFilename() . $file->getSize() . $file->getTmpName());
	     	$filename = $id . '.' . strtolower($file->getExt());
		}
		else{
			$filename = $filename . '.' . strtolower($file->getExt());
		}
		if (($width != 0) && ($height != 0)) {
			load_class('GD_MyImage');
			$image = & GD_MyImage :: createFromFile($file->getTmpName(), $file->getExt());
			$image->crop2($width, $height);
			$image->saveAsPng($path . DS . $filename);
			$image->destory();
		} else {
			$file->move($path . DS . $filename);
		}
		return array (true,	$dir.'/'.date('Y/m').'/'.$filename);
	}
  
  /**
   * 显示编辑器
   */
  function showEditor ($value='',$field='content',$height=400,$startEx=false,$barSet='Basic') {
		load_class('GD_FCKeditor');
		$fck= new GD_FCKeditor($field);
		$fck->Width		= '100%' ;
		$fck->Height		= $height ;
		$fck->ToolbarSet	= $barSet ;
		//$fck->Config['Enabled']=true;//可以上传文件
		$fck->Config['ToolbarStartExpanded']=$startEx;	
		$fck->Value = $value;
	    $this->_smarty->assign(array(
			'fck'=>$fck,
		));
  }
  
	/**
	 * 启动分页器
	 * @param GD_MyPage $mypage
	 * @param int $count
	 * @param array $urlArgs url参数
	 * @param array $initval 初始值 可选 如:array('itemsInPage'=>10)
	 * @return array $limit 返回limit数组
	 * 用法:
	 * <code>
	 * $mypage = get_singleton('GD_MyPage');
	 * $limit = $this->initPager($mypage,$count,array('key'=>'abc'));
	 * </code>
	 */
	function initPager (&$mypage,$count,$urlArgs=null,$initval=null) {
		//$mypage = get_singleton('GD_MyPage');
		$urlArgs=(array)$urlArgs;
		$urlArgs['page']='';
		$pn=get_app_inf('itemsInPage');
		if($pn=='')
			$pn=15;
		$params=array (
			'currentPage' => (int) $_GET['page'],
			'totalItems' => (int) $count, //总条数
			'pagesInOneView' => 5, //每版页数
			'itemsInPage' => $pn, //每页条数
			'currentPageColor' => 'red', //每页条数
			'pramHREF' => $this->_url($this->_action, $urlArgs), //连接参数	
		);	
		if(is_array($initval)){
			foreach($initval as $param => $val){
				$params[$param]=$val;
			}
		}
		$mypage->page($params);
		$mypage->doCalcs();
		$this->_smarty->assign(array(
			'pageList' => $mypage->printViews(),
			'myPage' => $mypage,
			'inStart'=>$count?$mypage->startAtPage+1:0,
		 	'inEnd' => $mypage->startAtPage+$params['itemsInPage'],
			));		
		$limit = array ($mypage->itemsInPage,$mypage->startAtPage);
		return $limit;
	}

	
}

function printErrors($errors) {
	if (!is_array($errors)) {
		return t($errors);
	}
	for ($i = 0; $i < count($errors); $i++) {
		$msg .= t($errors[$i]) . "<br />\n";
	}
	return $msg;
}

function getVar ($name) {
	return $_POST[$name]?$_POST[$name]:$_GET[$name];
}

function chnSubstr($param) {
	$str=$param['str'];
	$start=(int)$param['start'];
	$len=$param['len'];
	$strip=$param['strip'];
	$stripAll=$param['stripAll'];
	$nlbr=$param['nlbr'];
	if($stripAll){
		$str=strip_tags($str);
		$str=eregi_replace('&[a-z]+;|&#[a-z];','',$str);
	}
	elseif($strip)
	$str=strip_tags($str,'<br><a><b><i><u><p>');
 	preg_match_all("/[\\x80-\\xff]?./",$str,$arr);
 	$res= implode(array_slice($arr[0],$start,$len),"");
 	if($nlbr)
 		$res=str_replace('  ','&nbsp;&nbsp;',nl2br($res));
 	return $res;
}

/**
 * 中文字符串截取函数
 *
 * @param unknown_type $str
 * @param unknown_type $slen
 * @param unknown_type $startdd
 * @return unknown
 */
function cn_substr($str,$slen,$startdd=0){
	$restr = "";
	$c = "";
	$str_len = strlen($str);
	if($str_len < $startdd+1) return "";
	if($str_len < $startdd + $slen || $slen==0) $slen = $str_len - $startdd;
	$enddd = $startdd + $slen - 1;
	for($i=0;$i<$str_len;$i++)
	{
	if($startdd==0) $restr .= $c;
	else if($i > $startdd) $restr .= $c;
	if(ord($str[$i])>0x80){
	if($str_len>$i+1) $c = $str[$i].$str[$i+1];
	$i++;
	}
	else{ $c = $str[$i]; }
	if($i >= $enddd){
	if(strlen($restr)+strlen($c)>$slen) break;
	else{ $restr .= $c; break; }
	}
	}
	return $restr;
}
 
function utf8_substr($str, $limit, $h=false) { 
	if(strlen($str)<$limit):
		return $str;
	else:	
		$restr = ''; 
		for($i=0;$i< $limit-3;$i++) { 
		$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i]; 
		} 
		return $restr.$h; 
	endif;
} 

?>